# coding:utf-8
"""调度器模块"""

# 利用six模块实现py2和py3兼容, 还可通过try的方式分别导入
from six.moves.queue import Queue


class Scheduler(object):
    """
    1. 惠存请求对象(Request), 并为下载器提供请求对象, 实现请求的调度
    2. 对请求对象进行去重判断
    """

    def __init__(self):
        # 请求队列
        self.q = Queue()
        # 去重集合
        self.q_set = set()

    def add_request(self, request):
        """添加请求对象"""
        # 若不重复
        if self._filter_request(request):
            # 添加到请求队列和去重集合中
            self.q.put(request)
            self.q_set.add(request.url)

    def _filter_request(self, request):
        """请求去重标记"""
        # 若重复返回False, 否则返回True
        if request.url in self.q_set:
            return False
        else:
            return True

    def get_request(self):
        """获取请求对象, 并返回"""
        if not self.q.empty():
            return self.q.get()
